home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 7 / Amiga Format AFCD07 (Dec 1996, Issue 91).iso / serious / shareware / programming / ixemul-complete / ixemul / static / asctime.c < prev    next >
C/C++ Source or Header  |  1996-05-08  |  1KB  |  57 lines

  1. #ifndef lint
  2. #ifndef NOID
  3. static char    elsieid[] = "@(#)asctime.c    7.6";
  4. #endif /* !defined NOID */
  5. #endif /* !defined lint */
  6.  
  7. /*LINTLIBRARY*/
  8.  
  9. #include "private.h"
  10. #include "tzfile.h"
  11.  
  12. /*
  13. ** A la X3J11, with core dump avoidance.
  14. */
  15.  
  16. char *
  17. asctime(timeptr)
  18. register const struct tm *    timeptr;
  19. {
  20.     static const char    wday_name[][3] = {
  21.         "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
  22.     };
  23.     static const char    mon_name[][3] = {
  24.         "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  25.         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  26.     };
  27.     /*
  28.     ** Big enough for something such as
  29.     ** ??? ???-2147483648 -2147483648:-2147483648:-2147483648 -2147483648\n
  30.     ** (two three-character abbreviations, five strings denoting integers,
  31.     ** three explicit spaces, two explicit colons, a newline,
  32.     ** and a trailing ASCII nul).
  33.     */
  34.     static char        result[3 * 2 + 5 * INT_STRLEN_MAXIMUM(int) +
  35.                     3 + 2 + 1 + 1];
  36.     register const char *    wn;
  37.     register const char *    mn;
  38.  
  39.     if (timeptr->tm_wday < 0 || timeptr->tm_wday >= DAYSPERWEEK)
  40.         wn = "???";
  41.     else    wn = wday_name[timeptr->tm_wday];
  42.     if (timeptr->tm_mon < 0 || timeptr->tm_mon >= MONSPERYEAR)
  43.         mn = "???";
  44.     else    mn = mon_name[timeptr->tm_mon];
  45.     /*
  46.     ** The X3J11-suggested format is
  47.     **    "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n"
  48.     ** Since the .2 in 02.2d is ignored, we drop it.
  49.     */
  50.     (void) sprintf(result, "%.3s %.3s%3d %02d:%02d:%02d %d\n",
  51.         wn, mn,
  52.         timeptr->tm_mday, timeptr->tm_hour,
  53.         timeptr->tm_min, timeptr->tm_sec,
  54.         TM_YEAR_BASE + timeptr->tm_year);
  55.     return result;
  56. }
  57.